package com.caocaog.market.vo;

import com.caocaog.market.entity.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.util.DateRangeUtil;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;
import java.util.List;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
@ApiModel(value = "店铺详情vo")
public class ShopInfoVo {
    /**
     * id
     */
    @ApiModelProperty(value = "id")
    private String id;
    /**
     * 商家ID
     */
    @ApiModelProperty(value = "商家ID")
    private String merchantId;
    /**
     * 名称
     */
    @ApiModelProperty(value = "名称")
    private String name;
    /**
     * 店铺logo
     */
    @ApiModelProperty(value = "店铺logo")
    private String logo;
    /**
     * 店铺状态
     */
    @ApiModelProperty(value = "店铺状态")
    private Integer status;
    /**
     * 开始营业
     */
    @DateTimeFormat(pattern = "HH:mm")
    @ApiModelProperty(value = "开始营业")
    private String businessStd;
    /**
     * 结束营业
     */
    @DateTimeFormat(pattern = "HH:mm")
    @ApiModelProperty(value = "结束营业")
    private String businessEnd;

    @ApiModelProperty(value = "是否在营业时间内")
    private boolean inBusiness;

    // TODO 把两个shopVo整合到一个
    // caocaog-market-module-order -> vo.ShopInfoVo
    // caocaog-market-module-shop -> vo.ShopVo
    public void setInBusiness(LocalDateTime now) {
        // 如果店铺没有设置开始营业时间和结束营业时间，默认为全天营业
        this.inBusiness = StringUtils.isBlank(this.businessStd) && StringUtils.isBlank(this.businessEnd)
                // 如果开始营业时间等于结束营业时间，默认为全天营业
                || this.businessStd.equals(this.businessEnd)
                // 如果以上都不符合，那就对比看看是否在营业时间内
                || DateRangeUtil.isInMiddle(this.businessStd, this.businessEnd, now);
    }

    /**
     * 是否休息0:营业 1:休息
     */
    @ApiModelProperty(value = "是否休息0:营业 1:休息")
    private Integer isRest;
    /**
     * 营业执照
     */
    @ApiModelProperty(value = "营业执照")
    private String license;
    /**
     * 店铺等级
     */
    @ApiModelProperty(value = "店铺等级")
    private String level;
    /**
     * 店铺评级
     */
    @ApiModelProperty(value = "店铺评级")
    private String grade;
    /**
     * 热门店铺1:热门0非热门
     */
    @ApiModelProperty(value = "热门店铺1:热门0非热门")
    private Integer isHot;
    /**
     * 推荐店铺1:推荐 0:非推荐
     */
    @ApiModelProperty(value = "推荐店铺1:推荐 0:非推荐")
    private Integer recommend;

    @ApiModelProperty(value = "是否有许多商品")
    private Boolean manyGoods;
    /**
     * 店铺经度
     */
    @ApiModelProperty(value = "店铺经度")
    private String lng;
    /**
     * 店铺纬度
     */
    @ApiModelProperty(value = "店铺纬度")
    private String lat;
    /**
     * 省份
     */
    @ApiModelProperty(value = "省份")
    private Integer province;
    /**
     * 城市
     */
    @ApiModelProperty(value = "城市")
    private Integer city;
    /**
     * 区/县
     */

    private Integer area;
    /**
     * 所在地
     */
    @ApiModelProperty(value = "所在地")
    private String location;
    /**
     * 地址
     */
    @ApiModelProperty(value = "地址")
    private String address;
    /**
     * 主频道ID
     */
    @ApiModelProperty(value = "主频道ID")
    private String channelId;
    /**
     * 店铺类型
     */
    @ApiModelProperty(value = "店铺类型")
    private Integer type;

    @ApiModelProperty(value = "商家名称")
    private String merchantName;
    /**
     * 店铺ID
     */
    @ApiModelProperty(value = "店铺ID")
    private String shopId;

    /**
     * 商家客服服务电话
     */
    @ApiModelProperty(value = "商家客服服务电话")
    private String servicePhone;
    /**
     * 日单量
     */
//    @ApiModelProperty(value = "日单量")
//    private Integer orderDay;
    /**
     * 总单量
     */
//    @ApiModelProperty(value = "总单量")
//    private Integer orderTotal;
    /**
     * 月单量
     */
//    @ApiModelProperty(value = "月单量")
//    private Integer orderMonthly;
    /**
     * 自定义总单量
     */
    @ApiModelProperty(value = "自定义总单量")
    private Integer textTotal;
    /**
     * 自定义月单量
     */
    @ApiModelProperty(value = "自定义月单量")
    private Integer textMonthly;
    /**
     * 配送时长
     */
    @ApiModelProperty(value = "配送时长")
    private String duration;
    /**
     * 人均消费
     */
    @ApiModelProperty(value = "人均消费")
    private String perCost;
    /**
     * 起送价格
     */
    @ApiModelProperty(value = "起送价格")
    private String startFare;
    /**
     * 免费配送条件
     */
    @ApiModelProperty(value = "免费配送条件")
    private String freeDistribution;
    /**
     * 最大配送距离
     */
    @ApiModelProperty(value = "最大配送距离")
    private String mxDistance;
    /**
     * 免费配送距离
     */
    @ApiModelProperty(value = "免费配送距离")
    private String freeDistance;
    /**
     * 店铺统一打包费
     */
    @ApiModelProperty(value = "店铺统一打包费")
    private String pack;
    /**
     * 订单配送模式
     */
    @ApiModelProperty(value = "订单配送模式")
    private String oderModel;
    /**
     * 预约单配送模式
     */
    @ApiModelProperty(value = "预约单配送模式")
    private String appoModel;
    /**
     * 店铺的商品
     */
    @ApiModelProperty(value = "店铺的商品 ")
    private List<GoodsBasic> goodsBasicList;
    /**
     * 店铺的商品
     */
//    @ApiModelProperty(value = "店铺的商品 ")
//    private Page<GoodsVo> goodsVoList;

    /**
     * 店铺内的推荐商品
     */
    @ApiModelProperty(value = "店铺内的推荐商品 ")
    private List<GoodsVo> goodsVoPushList;

    /**
     * 店铺的商品分类
     */
    @ApiModelProperty(value = "店铺的商品分类")
//    private List<GoodsSort> goodsSortList; TODO 04-24号没问题后删除
    private List<GoodsCategories> goodsSortList;

    /**
     * 店铺的优惠
     */
    @ApiModelProperty(value = "店铺的优惠 ")
    private List<ShopPromo> shopPromoList;


    /**
     * 查询-分类id
     */
    @ApiModelProperty(value = "查询参数-分类id")
    private String sortId;

    /**
     * 实际距离
     */
    @ApiModelProperty(value = "实际距离")
    private double distance;
    @ApiModelProperty(value = "店铺配送信息")
    private ShopDelivery shopDelivery;
    @ApiModelProperty(value = "店铺外卖信息")
    private ShopTakeout shopTakeout;

}
